<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title xmlns:xlink="http://www.w3.org/1999/xlink">eglIntro - EGL Reference Pages</title>
    <link rel="stylesheet" type="text/css" href="khronos-man.css"/>
    <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"/>
  </head>
  <body>
    <header/>
    <div class="refentry" id="eglIntro">
      <div class="titlepage"/>
      <div class="refnamediv">
        <h2>Name</h2>
        <p>eglIntro — 
            introduction to managing client API rendering through the
            <abbr class="acronym">EGL</abbr> API.
        </p>
      </div>
      <div class="refsect1" id="overview">
        <h2>Overview</h2>
        <p>
            The <em class="firstterm">Khronos Native Platform Graphics
            Interface</em> (EGL) provides a means for rendering
            using a <em class="firstterm">client API</em> such as OpenGL ES
            (a 3D renderer for embedded systems), OpenGL (a functional
            superset of OpenGL ES for desktop systems), and OpenVG (a 2D
            vector graphics renderer) together with a
            <em class="firstterm">platform</em>, such as Microsoft Windows or
            the X Window System.
        </p>
        <p>
            Depending on its implementation EGL might be more or less
            tightly integrated into the platform. Most EGL
            functions require an EGL display connection, which can be
            obtained by calling
            <a class="citerefentry" href="eglGetPlatformDisplay.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetPlatformDisplay</span></span></a>
            or
            <a class="citerefentry" href="eglGetDisplay.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetDisplay</span></span></a>.
            To initialize and
            query what EGL version is supported on the display
            connection, call
            <a class="citerefentry" href="eglInitialize.xhtml"><span class="citerefentry"><span class="refentrytitle">eglInitialize</span></span></a>.
        </p>
        <p>
            The EGL specification does not define the set of platforms that
            may be supported by an EGL implementation, nor does it specify
            behavior specific to any platform. The set of supported
            platforms and their behavior is defined by platform-specific
            extensions. To detect if a particular platform is supported,
            clients should query the <code class="constant">EGL_EXTENSIONS</code>
            string of <code class="constant">EGL_NO_DISPLAY</code> using
            <a class="citerefentry" href="eglQueryString.xhtml"><span class="citerefentry"><span class="refentrytitle">eglQueryString</span></span></a>.
        </p>
        <p>
            Platforms supporting EGL make a subset of their
            visuals (which may also referred to as pixel formats, frame
            buffer configurations, or other similar terms) available for
            client API rendering. Windows and pixmaps created with these
            visuals may also be rendered into using the platform APIs.
        </p>
        <p>
            An EGL <em class="firstterm">surface</em> extends a native
            window or pixmap with additional <em class="firstterm">auxillary
            buffers</em>. These buffers include a color buffer, a
            depth buffer, a stencil buffer, and an alpha mask buffer.
            Some or all of the buffers listed are included in each EGL
            frame buffer configuration.
        </p>
        <p>
            EGL supports rendering into three types of surfaces:
            windows, pixmaps and pixel buffers (pbuffers). EGL window
            and pixmap surfaces are associated with corresponding
            resources of the platform. EGL pixel buffers are
            EGL-only resources, and do not accept rendering through the
            platform APIs.
        </p>
        <p>
            To render using a client API into an EGL surface, you must
            determine the appropriate EGL frame buffer configuration,
            which supports the rendering features the application
            requires.
            <a class="citerefentry" href="eglChooseConfig.xhtml"><span class="citerefentry"><span class="refentrytitle">eglChooseConfig</span></span></a>
            returns an <span class="type">EGLConfig</span> matching the required
            attributes, if any. A complete list of EGL frame buffer
            configurations can be obtained by calling
            <a class="citerefentry" href="eglGetConfigs.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetConfigs</span></span></a>.
            Attributes of a particular EGL frame buffer configuration
            can be queried by calling
            <a class="citerefentry" href="eglGetConfigAttrib.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetConfigAttrib</span></span></a>.
        </p>
        <p>
            For EGL window and pixmap surfaces, a suitable native window
            or pixmap with a matching native visual must be created
            first. For a given EGL frame buffer configuration, the
            native visual type and ID can be retrieved with a call to
            <a class="citerefentry" href="eglGetConfigAttrib.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetConfigAttrib</span></span></a>.
            For pixel buffers, no underlying native resource is
            required.
        </p>
        <p>
            To create an EGL window surface from a native window, call
            <a class="citerefentry" href="eglCreateWindowSurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreateWindowSurface</span></span></a>.
            To create an EGL pixmap surface from a native pixmap, call
            <a class="citerefentry" href="eglCreatePixmapSurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreatePixmapSurface</span></span></a>.
            To create a pixel buffer (pbuffer) surface (which has no
            associated native buffer), call
            <a class="citerefentry" href="eglCreatePbufferSurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreatePbufferSurface</span></span></a>
            To create a pixel buffer (pbuffer) surface whose color
            buffer is provided by an OpenVG <span class="type">VGImage</span>, call
            <a class="citerefentry" href="eglCreatePbufferFromClientBuffer.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreatePbufferFromClientBuffer</span></span></a>.
            Use
            <a class="citerefentry" href="eglDestroySurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglDestroySurface</span></span></a>
            to release previously allocated resources.
        </p>
        <p>
            An EGL rendering context is required to bind client API
            rendering to an EGL surface. An EGL surface and an EGL
            rendering context must have compatible EGL frame buffer
            configurations. To create an EGL rendering context, call
            <a class="citerefentry" href="eglCreateContext.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreateContext</span></span></a>.
            The type of client API context created (OpenGL ES, OpenVG,
            etc.) can be changed by first calling
            <a class="citerefentry" href="eglBindAPI.xhtml"><span class="citerefentry"><span class="refentrytitle">eglBindAPI</span></span></a>.
        </p>
        <p>
            An EGL rendering context may be bound to one or two EGL
            surfaces by calling
            <a class="citerefentry" href="eglMakeCurrent.xhtml"><span class="citerefentry"><span class="refentrytitle">eglMakeCurrent</span></span></a>.
            This context/surface(s) association specifies the
            <em class="firstterm">current context</em> and
            <em class="firstterm">current surface</em>, and is used by all
            client API rendering commands for the bound context until
            <a class="citerefentry" href="eglMakeCurrent.xhtml"><span class="citerefentry"><span class="refentrytitle">eglMakeCurrent</span></span></a>
            is called with different arguments.
        </p>
        <p>
            Both platform and client API commands may be used to operate
            on certain surfaces. However, the two command streams are
            not synchronized. Synchronization can be explicitly
            specified using by calling
            <a class="citerefentry" href="eglWaitClient.xhtml"><span class="citerefentry"><span class="refentrytitle">eglWaitClient</span></span></a>,
            <a class="citerefentry" href="eglWaitNative.xhtml"><span class="citerefentry"><span class="refentrytitle">eglWaitNative</span></span></a>,
            and possibly by calling other platform APIs.
        </p>
      </div>
      <div class="refsect1" id="examples">
        <h2>Examples</h2>
        <p>
            Below is a minimal example of creating an RGBA-format window that
            allows rendering with OpenGL ES.
            The window is cleared to yellow when the program runs. For simplicity,
            the program does not check for any errors.
        </p>
        <pre class="programlisting">
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;EGL/egl.h&gt;
#include &lt;GLES/gl.h&gt;
typedef ... NativeWindowType;
extern NativeWindowType createNativeWindow(void);
static EGLint const attribute_list[] = {
        EGL_RED_SIZE, 1,
        EGL_GREEN_SIZE, 1,
        EGL_BLUE_SIZE, 1,
        EGL_NONE
};
int main(int argc, char ** argv)
{
        EGLDisplay display;
        EGLConfig config;
        EGLContext context;
        EGLSurface surface;
        NativeWindowType native_window;
        EGLint num_config;

        /* get an EGL display connection */
        display = eglGetDisplay(EGL_DEFAULT_DISPLAY);

        /* initialize the EGL display connection */
        eglInitialize(display, NULL, NULL);

        /* get an appropriate EGL frame buffer configuration */
        eglChooseConfig(display, attribute_list, &amp;config, 1, &amp;num_config);

        /* create an EGL rendering context */
        context = eglCreateContext(display, config, EGL_NO_CONTEXT, NULL);

        /* create a native window */
        native_window = createNativeWindow();

        /* create an EGL window surface */
        surface = eglCreateWindowSurface(display, config, native_window, NULL);

        /* connect the context to the surface */
        eglMakeCurrent(display, surface, surface, context);

        /* clear the color buffer */
        glClearColor(1.0, 1.0, 0.0, 1.0);
        glClear(GL_COLOR_BUFFER_BIT);
        glFlush();

        eglSwapBuffers(display, surface);

        sleep(10);
        return EXIT_SUCCESS;
}
</pre>
      </div>
      <div class="refsect1" id="notes">
        <h2>Notes</h2>
        <p>
            Prior to EGL 1.5, platforms were referred to as the
            <em class="firstterm">native window system</em>, and
            platform-specific queries and APIs were not available. Only a
            single native window system was supported.
        </p>
      </div>
      <div class="refsect1" id="usingeglextensions">
        <h2>Using EGL Extensions</h2>
        <p>
            All supported EGL extensions will have a corresponding definition in
            <code class="filename">egl.h</code> and a token in the extension strings returned
            by
            <a class="citerefentry" href="eglQueryString.xhtml"><span class="citerefentry"><span class="refentrytitle">eglQueryString</span></span></a>.
        </p>
      </div>
      <div class="refsect1" id="futureeglversions">
        <h2>Future EGL Versions</h2>
        <p>
            <a class="citerefentry" href="eglInitialize.xhtml"><span class="citerefentry"><span class="refentrytitle">eglInitialize</span></span></a>
            and
            <a class="citerefentry" href="eglQueryString.xhtml"><span class="citerefentry"><span class="refentrytitle">eglQueryString</span></span></a>
            can be used to determine at run-time what version of EGL is available.
            To check the EGL version at compile-time, test whether
            <code class="constant">EGL_VERSION_<em class="replaceable"><code>x</code></em>_<em class="replaceable"><code>y</code></em></code>
            is defined, where <em class="replaceable"><code>x</code></em> and
            <em class="replaceable"><code>y</code></em> are the major and minor version
            numbers.
        </p>
      </div>
      <div class="refsect1" id="files">
        <h2>Files</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">
                <code class="filename">GLES/egl.h</code>
              </span>
            </dt>
            <dd>
              <p>
                    EGL header file
                </p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1" id="seealso">
        <h2>See Also</h2>
        <p>

            <a class="citerefentry" href="eglBindAPI.xhtml"><span class="citerefentry"><span class="refentrytitle">eglBindAPI</span></span></a>,
            <a class="citerefentry" href="eglChooseConfig.xhtml"><span class="citerefentry"><span class="refentrytitle">eglChooseConfig</span></span></a>,
            <a class="citerefentry" href="eglCreateContext.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreateContext</span></span></a>,
            <a class="citerefentry" href="eglCreatePbufferFromClientBuffer.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreatePbufferFromClientBuffer</span></span></a>,
            <a class="citerefentry" href="eglCreatePbufferSurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreatePbufferSurface</span></span></a>,
            <a class="citerefentry" href="eglCreatePixmapSurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreatePixmapSurface</span></span></a>,
            <a class="citerefentry" href="eglCreateWindowSurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreateWindowSurface</span></span></a>,
            <a class="citerefentry" href="eglDestroyContext.xhtml"><span class="citerefentry"><span class="refentrytitle">eglDestroyContext</span></span></a>,
            <a class="citerefentry" href="eglDestroySurface.xhtml"><span class="citerefentry"><span class="refentrytitle">eglDestroySurface</span></span></a>,
            <a class="citerefentry" href="eglGetConfigs.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetConfigs</span></span></a>,
            <a class="citerefentry" href="eglGetDisplay.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetDisplay</span></span></a>,
            <a class="citerefentry" href="eglGetPlatformDisplay.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetPlatformDisplay</span></span></a>,
            <a class="citerefentry" href="eglInitialize.xhtml"><span class="citerefentry"><span class="refentrytitle">eglInitialize</span></span></a>,
            <a class="citerefentry" href="eglMakeCurrent.xhtml"><span class="citerefentry"><span class="refentrytitle">eglMakeCurrent</span></span></a>,
            <a class="citerefentry" href="eglQueryString.xhtml"><span class="citerefentry"><span class="refentrytitle">eglQueryString</span></span></a>,
            <a class="citerefentry" href="eglSwapBuffers.xhtml"><span class="citerefentry"><span class="refentrytitle">eglSwapBuffers</span></span></a>,
            <a class="citerefentry" href="eglTerminate.xhtml"><span class="citerefentry"><span class="refentrytitle">eglTerminate</span></span></a>,
            <a class="citerefentry" href="eglWaitGL.xhtml"><span class="citerefentry"><span class="refentrytitle">eglWaitGL</span></span></a>,
            <a class="citerefentry" href="eglWaitNative.xhtml"><span class="citerefentry"><span class="refentrytitle">eglWaitNative</span></span></a>
        </p>
      </div>
      <p>
    </p>
      <div class="refsect3" id="copyright">
        <img src="KhronosLogo.jpg"/>
        <p>
            Copyright © 2003-2014 The Khronos Group Inc.
            Permission is hereby granted, free of charge, to any person obtaining a
            copy of this software and/or associated documentation files (the
            "Materials"), to deal in the Materials without restriction, including
            without limitation the rights to use, copy, modify, merge, publish,
            distribute, sublicense, and/or sell copies of the Materials, and to
            permit persons to whom the Materials are furnished to do so, subject to
            the condition that this copyright notice and permission notice shall be included
            in all copies or substantial portions of the Materials.
        </p>
      </div>
      <p>
</p>
    </div>
    <footer/>
  </body>
</html>
